﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

using Libreria.SIG.Modelo;

namespace Libreria.SIG.Negocio
{
    public class InventarioNegocio
    {
        public List<Inventario> consultarInventarios(String cadenaDeConexion)
        {
            Inventario listaDeInventarios = new Inventario(cadenaDeConexion);
            return listaDeInventarios.consultar();
        }

        public List<Inventario> consultarInventariosPorIngrediente(Int32 codigoIngrediente, String cadenaDeConexion)
        {
            Inventario listaDeInventarios = new Inventario(cadenaDeConexion);
            return listaDeInventarios.consultarPorIngrediente(codigoIngrediente);
        }

        public DataTable reporteIngredientesPorTipo(Int32 tipoIngrediente, String cadenaDeConexion)
        {
            DataTable tblInventariosPorIngrediente = new DataTable();
            tblInventariosPorIngrediente.Columns.Add("CodIngrediente", typeof(Int32));
            tblInventariosPorIngrediente.Columns.Add("NombreIngrediente", typeof(String));
            tblInventariosPorIngrediente.Columns.Add("CantidadMinima", typeof(Int32));
            tblInventariosPorIngrediente.Columns.Add("CantidadMaxima", typeof(Int32));
            tblInventariosPorIngrediente.Columns.Add("ExistenciaActual", typeof(Int32));
            tblInventariosPorIngrediente.Columns.Add("PorcentajeInventario", typeof(Double));

            IngredienteNegocio ingredienteNeg = new IngredienteNegocio();
            List<Ingrediente> listaIngredientesTipo = ingredienteNeg.consultarIngredientesPorTipo(tipoIngrediente, cadenaDeConexion);

            InventarioNegocio inventarioNegocio = new InventarioNegocio();

            foreach (Ingrediente ingrediente in listaIngredientesTipo)
            {
                List<Libreria.SIG.Modelo.Inventario> inventarios = inventarioNegocio.consultarInventariosPorIngrediente((int)ingrediente.Codigo, cadenaDeConexion);
                int existencia = 0;
                foreach (Inventario inventario in inventarios)
                {
                    if (inventario.TipoMovimiento == "E")
                    {
                        existencia += inventario.Cantidad.Value;
                    }
                    else
                    {
                        existencia -= inventario.Cantidad.Value;
                    }
                }
                DataRow rowInventario = tblInventariosPorIngrediente.NewRow();
                rowInventario["CodIngrediente"] = ingrediente.Codigo;
                rowInventario["NombreIngrediente"] = ingrediente.Nombre;
                rowInventario["CantidadMinima"] = ingrediente.CantidadMinima;
                rowInventario["CantidadMaxima"] = ingrediente.CantidadMaxima;
                rowInventario["ExistenciaActual"] = existencia;
                if (ingrediente.CantidadMaxima > 0)
                {
                    rowInventario["PorcentajeInventario"] = existencia * 100 / ingrediente.CantidadMaxima;
                }
                else
                {
                    rowInventario["PorcentajeInventario"] = 0;
                }

                tblInventariosPorIngrediente.Rows.Add(rowInventario);
            }

            return tblInventariosPorIngrediente;
        }

        
        
        
        public void eliminarInventario(Int32 Codigo, String cadenaDeConexion)
        {
            Inventario InventarioAEliminar = new Inventario(cadenaDeConexion);
            InventarioAEliminar.Codigo = Codigo;
            InventarioAEliminar.CodIngrediente = null;
            InventarioAEliminar.Fecha = new DateTime();
            InventarioAEliminar.Cantidad = null;
            InventarioAEliminar.TipoMovimiento = null;
            InventarioAEliminar.CostoUnitario = null;
            InventarioAEliminar.CostoTotal = null;
            InventarioAEliminar.eliminar();
        }

        public void actualizarInventario(Int32 Codigo,int CodIngrediente, DateTime Fecha, int Cantidad, String TipoMovimiento, Double CostoUnitario, String cadenaDeConexion)
        {
            Inventario InventarioAActualizar = new Inventario(cadenaDeConexion);
            InventarioAActualizar.Codigo = Codigo;
            InventarioAActualizar.CodIngrediente = CodIngrediente;
            InventarioAActualizar.Fecha = Fecha;
            InventarioAActualizar.Cantidad = Cantidad;
            InventarioAActualizar.TipoMovimiento = TipoMovimiento;
            InventarioAActualizar.CostoUnitario = CostoUnitario;
            InventarioAActualizar.CostoTotal = Cantidad * CostoUnitario;
            InventarioAActualizar.actualizar();
        }

        public void crearInventario(Int32 Codigo, int CodIngrediente, DateTime Fecha, int Cantidad, String TipoMovimiento, Double CostoUnitario, String cadenaDeConexion)
        {
            Inventario InventarioACrear = new Inventario(cadenaDeConexion);
            InventarioACrear.Codigo = null;
            InventarioACrear.CodIngrediente = CodIngrediente;
            InventarioACrear.Fecha = DateTime.Now;
            InventarioACrear.Cantidad = Cantidad;
            InventarioACrear.TipoMovimiento = TipoMovimiento;
            InventarioACrear.CostoUnitario = CostoUnitario;
            InventarioACrear.CostoTotal = Cantidad * CostoUnitario;
            InventarioACrear.crear();
        }
    }
}
